# 需要提前安装 flameprof 包，并将该包下的 flameprof.py 文件放入当前路径下，才能生成 svg 文件
import cProfile
import io
import pstats


# 性能分析封装
def nature(function):
    def wrapped(*args, **kwargs):
        pr = cProfile.Profile()
        pr.enable()

        result = function(*args, **kwargs)  # 需要分析性能的函数

        pr.disable()
        s = io.StringIO()
        sortby = "cumtime"  # 仅适用于 3.6, 3.7 把这里改成常量了
        ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
        ps.print_stats()
        print(s.getvalue())

        pr.dump_stats("request.prof")
        print("终端生成火焰图 >>>  python flameprof.py request.prof > request.svg")
        print("生成完毕需调整编码格式才可正常打开")
        return result

    return wrapped
